#define _CRT_SECURE_NO_WARNINGS


#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
//
//class Solution {
//public:
//    int minSubArrayLen(int target, vector<int>& nums) {
//        int len = 1;
//        int left = 0;
//        int right = 0;
//        int n = nums.size();
//        int sum = nums[left];
//        int ans = 0;
//        while (left <= right && right < n)
//        {
//            if (sum >= target)
//            {
//                if (left == right)
//                {
//                    return 1;
//                }
//                else
//                {
//                    if (ans > len || ans == 0)
//                        ans = len;
//                    sum -= nums[left];
//                    left++;
//                    len--;
//                }
//            }
//            else
//            {
//                right++;
//                len++;
//                if (right < n)
//                    sum += nums[right];
//            }
//        }
//        return ans;
//    }
//};
//
//class Solution {
//public:
//    int lengthOfLongestSubstring(string s) {
//        if (s.size() == 0)
//            return 0;
//        int n = s.size();
//        int len = 1;
//        string sub;
//        for (int left = 0, right = 1; right < n; )
//        {
//            if (find(s.begin() + left, s.begin() + right, s[right]) == s.begin() + right)
//            {
//                if (len < right - left + 1)
//                    len = right - left + 1;
//                right++;
//            }
//            else
//            {
//                left++;
//            }
//        }
//        return len;
//    }
//};

//int main()
//{
//    const char* str = "abcde";
//    const char* f = find(str, str + 4, 'x');
//    cout << *f << endl;
//    return 0;
//}

class Solution {
public:
    int longestOnes(vector<int>& nums, int k) {
        int n = nums.size();
        int ans = 0;
        int len = 0;
        int tmpk = k;
        for (int left = 0, right = 0; right < n;)
        {
            if (nums[right] == 1)
            {
                right++;
                len++;
            }
            else
            {
                if (tmpk > 0)
                {
                    right++;
                    len++;
                    tmpk--;
                }
                else
                {
                    while (nums[left] == 1)
                    {
                        left++;
                        len--;
                    }
                    if (left <= right && nums[left] == 0)
                    {
                        if (left == right)
                        {
                            right++;
                        }
                        else
                        {
                            len--;
                        }
                        left++;

                        if (tmpk < k)
                            tmpk++;
                    }

                }
            }
            if (ans < len)
                ans = len;
        }
        return ans;
    }
};
int main()
{
    vector<int> v({ 0,0,0,1 });
    Solution().longestOnes(v, 4);
    return 0;
}